<?php

namespace Controller;

class FileUploadController{

	private $m_path = "uploadedFiles/";
	private $m_name = "name";
		
	/**
	 * Hanterar uppladning av filer
	 * @param Objekt $database  ett databasobjekt
	 * @param bool $loggedin  om användaren är inloggad eller ej
	 * @param bool $superuser om användaren är superuser eller ej
	 * @param int $currentId id på den aktuella användaren
	 */
	public function DoControll($database, $loggedin, $superUser, $currentId)
	{
		$FileUploadView = new \View\FileUploadView();
		$FileUploadHandler = new \Model\FileUploadHandler($database);
		$UserHandler = new \Model\Userhandler($database);

		$output;

		$message = $FileUploadView->Message("");


		// Hämta en lista på användare från UserHandler
		$userArray = $UserHandler->GetAllUsers();

		// Om det finns ett medelande skall detta skrivas ut
		if($FileUploadHandler->UserMessageExists() != false) {						
			$message = $FileUploadView->Message($FileUploadHandler->UserMessageExists());
			$FileUploadHandler->ClearUserMessage();
		}

		// Kontrollerar om användaren är inloggad
		if ($loggedin == true) {

			// Kontrollerar om användaren är admin
			if ($superUser == true) {

				// Skapar mitt uppladdningsformulär. Skickar med en lista över användare
				$output = $FileUploadView->CreateUploadForm($userArray);

				// Kontrollerar om användaren vill ladda upp en fil
				if($FileUploadView->TriedToUpload()){
					// Hämtar filen användaren vill ladda upp
					$file = $FileUploadView->GetFile();		

					// Kontrollerar om filnamnet redan finns
					if ($FileUploadHandler->DoFilenameExist($file, $this->m_path)) {
							// Bestämmer vilket meddelande som skall visas
							$FileUploadHandler->SetUserMessage(\View\FileUploadView::FILENAME_EXISTS);
							$FileUploadHandler->RedirectToSelf();
					}	

					// Sparar filen om filnamnet är unikt och filen är av en godkänd typ
					else if ($FileUploadHandler->CheckFile($file, $this->m_path) == true) {						

						// Kontrollerar vem filen skall sparas till
						$userid = $FileUploadView->GetDropDownUser();

						// Om userid är större än 0 har en användare valts och filen sparas
						if($userid > 0){		

							$filename = $file[$this->m_name];

							// Sparar filen på disk och filnamnet i databasen
							$FileUploadHandler->SaveFile($file, $this->m_path);
							$FileUploadHandler->SaveFileToDatabase($filename, $userid);

							// Bestämmer vilket meddelande som skall visas
							$FileUploadHandler->SetUserMessage(\View\FileUploadView::SUCCESS);
							$FileUploadHandler->RedirectToSelf();										
						}
						else{
							// Bestämmer vilket meddelande som skall visas	
							$FileUploadHandler->SetUserMessage(\View\FileUploadView::NO_USER_SELECTED);						
							$FileUploadHandler->RedirectToSelf();
						}						
					}
					else{	
						
						// Bestämmer vilket meddelande som skall visas
						$FileUploadHandler->SetUserMessage(\View\FileUploadView::WRONG_TYPE);
						$FileUploadHandler->RedirectToSelf();		
					}

					// Skriver ut felmeddelande om användaren inte har valt en fil
					if(empty($file[$this->m_name])){					

						// Bestämmer vilket meddelande som skall visas	
						$FileUploadHandler->SetUserMessage(\View\FileUploadView::NO_FILE_SELECTED);						
						$FileUploadHandler->RedirectToSelf();
					}
				}				
				$html = $message .= $output;				
				return $html;		
			}
			else{

				// Hämtar ut alla bilder som tillhör den aktuella användaren
				$fileArray = $FileUploadHandler->GetFilesFromDatabase($currentId);
				$output = $FileUploadView->FileOutput($fileArray, $this->m_path);
			}
		}		
		return $output;
	}
}
